{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第10课：动手实战基于 CNN 的电影推荐系统"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "（1）首先输入一个 32*32 的矩阵；\n",
    "\n",
    "（2）第一次卷积核大小为 2*2，得到 31*31 的矩阵，然后通过 [1,14,1,1] 的 max-pooling 操作，得到的矩阵为 18*31；\n",
    "\n",
    "（3）第二次卷积核大小为 3*3，得到 16*29的矩阵，然后通过[1,13,1,1] 的 max-pooling 操作，得到的矩阵为 4*29；\n",
    "\n",
    "（4）第三次卷积核大小 4*4，得到 1*26 的矩阵，然后通过 [1,12,1,1] 的 max-pooling 操作，得到的矩阵为 1*26；\n",
    "\n",
    "（5）第四次卷积核大小 5*5，得到 1*22 的矩阵，然后通过 [1,11,1,1] 的 max-pooling 操作，得到的矩阵为 1*22；\n",
    "\n",
    "（6）最后通过 Dropout 和全连接层，len(window_sizes) * filter_num =32，得到 1*32的矩阵。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "O=(W-K+2P)/S+1，其中O是输出高度/长度，W输入的高度/长度，K是filter在大小，P是padding大小，S是stride的大小。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "ReLU层之后，我们可能会选择连接一个pooling层，也可以看作是降采样层（downsampling）。pooling层有很多种不同类型，最常用的是maxpooling。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dropout层是Neural Network中有着特征功能的层，主要针对过拟合问题。dropout层从一些层中随机丢弃掉一些激活神经元（在Forward pass的过程中设置这些集合为0）。这样的目的主要是强制增加网络的冗余性，也就是说使得模型能够在一些激活神经元丢失的情况下仍然保持分类的正确性。从而使得模型不会对训练数据过于拟合，减少过拟合问题。注意：dropout层只应用于训练阶段，而不用于测试阶段。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Network in network层指的是一个filter为1*1大小的conv层，主要是针对深度信息（比如一个1*1*N的卷积，N表示filter的数量）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# clone地址：https://github.com/jianfengMan/movie_recommender"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
